<template>
    <yin-login-logo></yin-login-logo>
    <div class="sign">
      <div class="sign-head">
        <span>用户注册</span>
      </div>
      <el-form ref="signUpForm" label-width="70px" status-icon :model="registerForm" :rules="SignUpRules">
        <el-form-item prop="username" label="用户名">
          <el-input v-model="registerForm.username" placeholder="用户名"></el-input>
        </el-form-item>
        <el-form-item prop="password" label="密码">
          <el-input type="password" placeholder="密码" v-model="registerForm.password"></el-input>
        </el-form-item>
        <el-form-item prop="sex" label="性别">
          <el-radio-group v-model="registerForm.sex">
            <el-radio :label="0">女</el-radio>
            <el-radio :label="1">男</el-radio>
            <el-radio :label="2">保密</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item prop="phoneNum" label="手机">
          <el-input placeholder="手机" v-model="registerForm.phoneNum"></el-input>
        </el-form-item>
        <el-form-item prop="email" label="邮箱">
          <el-input v-model="registerForm.email" placeholder="邮箱"></el-input>
        </el-form-item>
        <el-form-item prop="birth" label="生日">
          <el-date-picker type="date" placeholder="选择日期" v-model="registerForm.birth" style="width: 100%"></el-date-picker>
        </el-form-item>
        <el-form-item prop="introduction" label="签名">
          <el-input type="textarea" placeholder="签名" v-model="registerForm.introduction"></el-input>
        </el-form-item>
        <el-form-item prop="location" label="地区">
          <el-select v-model="registerForm.location" placeholder="地区" style="width: 100%">
            <el-option v-for="item in AREA" :key="item.value" :label="item.label" :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item class="sign-btn">
          <el-button @click="goBack()">登录</el-button>
          <el-button type="primary" @click="handleSignUp()">确定</el-button>
        </el-form-item>
      </el-form>
    </div>
  </template>
  
  <script setup lang="ts">
  import { reactive, getCurrentInstance, ref } from "vue";
  import mixin from "@/mixins/mixin";
  import YinLoginLogo from "@/components/layouts/YinLoginLogo.vue";
  import { HttpManager } from "@/api";
  import { getBirth } from "@/utils";
  import { AREA, RouterName, NavName, SignUpRules } from "@/enums";
  import { ElMessage } from "element-plus";
  
  const { proxy } = getCurrentInstance();
  const { routerManager, changeIndex } = mixin();
  const signUpForm = ref<InstanceType<typeof import('element-plus')['ElForm']>>();
  
  const registerForm = reactive({
    username: "",
    password: "",
    sex: "",
    phoneNum: "",
    email: "",
    birth: new Date(),
    introduction: "",
    location: "",
  });
  
  // 定义goBack方法，导航到登录页面
  const goBack = () => {
    changeIndex(NavName.SignIn);
    routerManager(RouterName.SignIn, { path: RouterName.SignIn });
  };
  
  async function handleSignUp() {
    if (!signUpForm.value) return;
  
    let canRun = true;
    signUpForm.value.validate((valid) => {
      if (!valid) canRun = false;
    });
    if (!canRun) return;
  
    try {
      const username = registerForm.username;
      const password = registerForm.password;
      const gender = registerForm.sex;
      const phoneNum = registerForm.phoneNum;
      const email = registerForm.email;
      const birth = registerForm.birth;
      const introduction = registerForm.introduction;
      const location = registerForm.location;
      const result = (await HttpManager.SignUp({username,password,gender,phoneNum,email,birth,introduction,location})) as ResponseBody;
      ElMessage({
        message: result.message,
        type: result.type as any,
      });
  
      if (result.success) {
        changeIndex(NavName.SignIn);
        routerManager(RouterName.SignIn, { path: RouterName.SignIn });
      }
    } catch (error) {
      console.error(error);
    }
  }
  </script>
  
  <style lang="scss" scoped>
  // 使用Sass 3.0新模块系统导入
  @use "@/assets/css/sign.scss";
  </style>